package tp.tecnicasdisenio.bean;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import tp.tecnicasdisenio.model.entity.Cuatrimestre;
import tp.tecnicasdisenio.model.entity.Materia;
import tp.tecnicasdisenio.model.entity.TrabajoPractico;
import tp.tecnicasdisenio.model.entity.TrabajoPractico.ClaveTrabajoPractivo;
import tp.tecnicasdisenio.service.ServiceFacadeInterface;
import tp.tecnicasdisenio.service.impl.ServiceFacade;
import tp.tecnicasdisenio.util.FechaUtil;

@ViewScoped
@ManagedBean
public class MateriaBean implements Serializable{

	private static final long serialVersionUID = 1L;

	private ServiceFacadeInterface service;
	private List<Materia> materiasFiltradas;
	private Materia materiaFiltro;
	private Materia materiaAlta;
	private Materia materiaSeleccionada;
	private TrabajoPractico nuevoTrabajoPractico;
	private List<TrabajoPractico> trabajosPracticos;

	@PostConstruct
	public void init(){
		service= new ServiceFacade();
		materiaAlta= new Materia();
		materiaFiltro= new Materia();
		materiaFiltro.setNombre("");
		materiaFiltro.setCodigo("");
		materiaFiltro.setNombre("");
		materiaFiltro.setPassword("");
	}

	public void onBuscar(){
		try{
			String codigo= materiaFiltro.getCodigo();
			String nombre= materiaFiltro.getNombre();
			String email= materiaFiltro.getEmail();

			materiasFiltradas= service.filtrarPor(codigo, nombre, email);
		} catch (Exception e) {
			e.printStackTrace();
			//TODO notificar usuario
		}
	}

	public void onAlta(){
		try {
			service.alta(materiaAlta);

			materiaAlta= new Materia();
		} catch (Exception e) {
			e.printStackTrace();
			//TODO notificar usuario
		}
	}

	public String onCrearTp(){
		try{
			nuevoTrabajoPractico= new TrabajoPractico();
			ClaveTrabajoPractivo clave= new ClaveTrabajoPractivo();
			Cuatrimestre cuatriActual= FechaUtil.getCuatrimestreActual();
			String nroTp= service.getUltimoNroTpDeMateria(materiaSeleccionada, cuatriActual);

			clave.setMateria(materiaSeleccionada);
			clave.setCuatrimestre(cuatriActual);
			clave.setNumeroTp(nroTp);
			nuevoTrabajoPractico.setClaveTrabajoPractivo(clave);
		} catch (Exception e) {
			e.printStackTrace();
			//TODO notificar usuario
		}
		return null;
	}

	public void onGuardarTp(){
		try{
			service.alta(nuevoTrabajoPractico);
		} catch (Exception e) {
			e.printStackTrace();
			//TODO notificar usuario
		}
	}
	
	public void onCargarTps(){
		try{
			trabajosPracticos= service.getTpsDe(materiaSeleccionada);
		} catch (Exception e) {
			e.printStackTrace();
			//TODO notificar usuario
		}
	}
	
	public String onEditarMateria(){
		try{
			service.actualizar(materiaSeleccionada);
			
			materiaSeleccionada= null;
		} catch (Exception e) {
			e.printStackTrace();
			//TODO notificar usuario
		}
		return null;
	}

	public List<Materia> getMateriasFiltradas() {
		return materiasFiltradas;
	}

	public void setMateriasFiltradas(List<Materia> materiasFiltradas) {
		this.materiasFiltradas = materiasFiltradas;
	}

	public Materia getMateriaFiltro() {
		return materiaFiltro;
	}

	public void setMateriaFiltro(Materia materiaFiltro) {
		this.materiaFiltro = materiaFiltro;
	}

	public Materia getMateriaAlta() {
		return materiaAlta;
	}

	public void setMateriaAlta(Materia materiaAlta) {
		this.materiaAlta = materiaAlta;
	}

	public Materia getMateriaSeleccionada() {
		return materiaSeleccionada;
	}

	public void setMateriaSeleccionada(Materia materiaSeleccionada) {
		this.materiaSeleccionada = materiaSeleccionada;
	}

	public TrabajoPractico getNuevoTrabajoPractico() {
		return nuevoTrabajoPractico;
	}

	public void setNuevoTrabajoPractico(TrabajoPractico nuevoTrabajoPractico) {
		this.nuevoTrabajoPractico = nuevoTrabajoPractico;
	}

	public List<TrabajoPractico> getTrabajosPracticos() {
		return trabajosPracticos;
	}

	public void setTrabajosPracticos(List<TrabajoPractico> trabajosPracticos) {
		this.trabajosPracticos = trabajosPracticos;
	}

}
